home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / var / lib / python-support / python2.6 / rdflib / Journal.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  3.2 KB  |  88 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import logging
  5. _logger = logging.getLogger(__name__)
  6. from rdflib.Graph import QuotedGraph
  7. from rdflib.events import Event, Dispatcher
  8. from rdflib.store import TripleAddedEvent, TripleRemovedEvent, StoreCreatedEvent
  9.  
  10. class JournalWriter(object):
  11.     '''
  12.     Writes a journal of the store events.
  13.     '''
  14.     
  15.     def __init__(self, store, stream = None, filename = None):
  16.         if stream is None:
  17.             if not filename:
  18.                 raise AssertionError, 'Must specify either stream or filename'
  19.             stream = file(filename, 'ab')
  20.         
  21.         dispatcher = store.dispatcher
  22.         dispatcher.subscribe(TripleAddedEvent, self.journal_event)
  23.         dispatcher.subscribe(TripleRemovedEvent, self.journal_event)
  24.         dispatcher.subscribe(StoreCreatedEvent, self.journal_event)
  25.         self._dumps = store.node_pickler.dumps
  26.         self._write = stream.write
  27.  
  28.     
  29.     def journal_event(self, event):
  30.         self._write(self._dumps(event))
  31.         self._write('\n\n')
  32.  
  33.  
  34.  
  35. class JournalReader(object):
  36.     '''
  37.     Reads a journal of store events into a store.
  38.     '''
  39.     
  40.     def __init__(self, store, filename):
  41.         self.stream = file(filename, 'rb')
  42.         self.store = store
  43.         dispatcher = Dispatcher()
  44.         dispatcher.subscribe(TripleAddedEvent, self.add)
  45.         dispatcher.subscribe(TripleRemovedEvent, self.remove)
  46.         dispatcher.subscribe(StoreCreatedEvent, self.store_created)
  47.         loads = store.node_pickler.loads
  48.         dispatch = dispatcher.dispatch
  49.         lines = []
  50.         for line in self.stream:
  51.             if line == '\n':
  52.                 
  53.                 try:
  54.                     event = loads(''.join(lines))
  55.                     dispatch(event)
  56.                     lines = []
  57.                 except Exception:
  58.                     e = None
  59.                     _logger.exception(e)
  60.                     _logger.debug("lines: '%s'" % lines)
  61.                     lines = []
  62.                 except:
  63.                     None<EXCEPTION MATCH>Exception
  64.                 
  65.  
  66.             None<EXCEPTION MATCH>Exception
  67.             lines.append(line)
  68.         
  69.  
  70.     
  71.     def add(self, event):
  72.         context = event.context
  73.         quoted = isinstance(context, QuotedGraph)
  74.         self.store.add(event.triple, context, quoted)
  75.  
  76.     
  77.     def remove(self, event):
  78.         self.store.remove(event.triple, event.context)
  79.  
  80.     
  81.     def store_created(self, event):
  82.         n = len(self.store)
  83.         if n > 0:
  84.             _logger.warning("Store not empty for 'store created'. Contains '%s' assertions" % n)
  85.         
  86.  
  87.  
  88.